\chapter{Fundamentação Teórica}

\section{Realidade Aumentada}

Realidade Aumentada – RA consiste na mistura entre o ambiente virtual com o ambiente real, onde objetos virtualizados se sobrepõem ao mundo real, proporcionando a visualização de imagens digitalizadas de maneira bastante realista. Com a RA, um usuário pode interagir com os objetos virtualizados, criados no computador, sem que precise de treinamentos intensivos para que essa interação aconteça [TOLEDO, 2010].
	A Realidade Aumentada está dentro de um contexto mais abrangente, conceituada através da composição do ambiente que será utilizada a técnica. Esse contexto é denominado de Realidade Misturada, que é definida pelo arranjo entre o ambiente virtual com o real, que é denominado de duas formas: se o ambiente principal utilizado para a interação é o real, a técnica é denominada de Realidade Aumentada; porém, se ambiente principal a ser utilizado for o virtual, denomina-se à técnica como Virtualidade Aumentada (VA) [MECATE, et. al., 2011].
	A Realidade Aumentada pode ser aplicada através de um computador, utilizando algumas técnicas de desenvolvimento, para que se concretize a interação entre o ambiente real em que o usuário está inserido e o ambiente virtual criado no computador, em tempo real. Através de um webcam instalado no computador, pode-se capturar a imagem real desejada, com o uso de visão computacional, projetando a imagem virtual sobre o ambiente real. Com essa forma de utilizar RA, o processamento das imagens será gerenciado pelo software que irá posicionar a imagem virtual exatamente no local esperado pelo usuário, dando assim, a impressão de que o objeto virtual esteja inserido no mundo real.
	A Realidade Aumentada possui eficácia em seu uso, por conseguir, através de recursos externos, programados para posicionar as imagens em locais que se aproximam de exatos locais que estariam posicionados, se existissem no mundo real. Tais recursos são obtidos através de visão computacional, computação gráfica, e outros recursos utilizados que podem ser utilizados nos computadores e em aparelhos móveis que utilizam a webcam e câmera digital, respectivamente, e funções como GPS.
	No computador, podem-se usar formas que posicionem o objeto digitalizado em marcadores, onde são conceituados como desenhos geométricos, que são preenchidos com uma única escala de cor, que facilita a junção desse objeto virtual com o marcador, impresso em papel, no ambiente real. Na Figura 1, se apresenta o modo de realizar uma interação utilizando RA. Através de uma câmera, que capta a imagem real a transfere para o computador, o objeto virtual é posicionado sobre o símbolo, que se caracteriza por um marcador que serve de base para que cada ponto do mesmo possa servir de referência para que cada ponto da imagem virtual seja posicionado nos locais marcados para os mesmos, no marcador.
	Alguns exemplos de marcadores podem ser visualizados na Figura 3. Cada ponto com a cor preta é usado para que cada pixel da imagem digitalizada possa ser posicionado sobre os pontos, em tempo real, dando a impressão, a partir de cada movimento da imagem real, que o objeto virtual esteja interagindo fisicamente com o objeto real. Cada marcador é utilizado para um determinado tipo de implementação de uma aplicação de Realidade Aumentada.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\realidade_aumentada.png}
\caption{Exemplo de um objeto virtual introduzido ao meio real, através de uma câmera com um computador pessoal.}
\label{featureSpaces}
\end{center} 
\end{figure}

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\marcadores.png}
\caption{Exemplos de marcadores usados para desenvolvimento de RA.}
\label{featureSpaces}
\end{center} 
\end{figure}

Para desenvolver aplicações no ramo da Realidade Aumentada, é necessário o uso de frameworks e bibliotecas. Alguns deles que podem ser citados são o ARToolKit\footnote{Disponível em: http://www.hitl.washington.edu/artoolkit/}, o JARToolKit\footnote{Disponível em: http://sourceforge.net/projects/jartoolkit/}, com o Java como código-fonte padrão, e os outros frameworks que serão citados nos próximos capítulos desse trabalho. Essas ferramentas oferecem métodos que auxiliam na manipulação de dados de vídeo e a renderização desses dados, em tempo real de execução [GROHS & MAESTRI, 2002].
	Estes frameworks disponibilizam métodos que empregam técnicas de visão computacional que detectam e posicionam a imagem nos pontos dos marcadores, capturadas pela câmera. Essas ferramentas requerem que o desenvolvedor faça diversos testes, projetando as imagens sobre os marcadores, para que se definam com precisão as coordenadas espaciais, a orientação dos objetos virtuais, e identificar a sensibilidade presente nos movimentos feitos pelo usuário que implicarão em alterações nas informações de posicionamento do objeto [TOLEDO, 2010].
	O uso de marcadores para realização de uma interação de RA é bastante eficaz, porém limitado. Isso porque para projeção dos objetos virtuais, devem-se conter os marcadores visíveis à câmera, para que ela possa reconhecer o marcador como um campo de posicionamento, para dessa forma, projetar o objeto [AFFONSO & OLIVEIRA, 2006].
	Para resolução dessas limitações, se faz o uso de recursos de posicionamento através de coordenadas geográficas. Como solução é o GPS, o qual identifica a posição do objeto e o posiciona na tela de um dispositivo, de acordo com sua posição geográfica. Com tal recurso, mantém o usuário livre do uso de marcadores, pois a partir de qualquer movimento realizado com a câmera, não terá preocupação com certas falhas de reconhecimento dos marcadores, vindas de inclinações feitas com o marcador em relação à câmera, trazendo mais liberdade nos movimentos e eficácia na projeção dos objetos virtuais.
	
\section{Android}

O Android foi o primeiro sistema operacional de plataforma aberta para desenvolvimento de aplicações para dispositivos móveis com o potencial de conseguir ingressar significativamente nos principais mercados do setor de telefonia móvel no mundo. Foi um produto comprado pela uma das maiores empresas de tecnologia, a Google, da empresa Open Hanset Allience. Atualmente, existem muitos sistemas para os aparelhos móveis no mundo, como iOS\footnote{© 2012 Apple Inc. Todos os direitos reservados.}, o Symbian\footnote{© 2012 Nokia. Todos os direitos reservados.}, BlackBerry\footnote{© 2012 Research in Motion (RIM). Todos os direitos reservados.}  entre outros [Hello, Android, 2008].
Mesmo com diversas opções no mercado, o Android foi uma das plataformas que mais se destacou, por sua robustez, e por combinar diversas características que chamaram a atenção dos consumidores e desenvolvedores. Seu código aberto, baseado em Linux, deixa os desenvolvedores livres para criarem qualquer tipo de aplicação sem precisarem pagar royalties\footnote{Disponível em: http://www.senado.gov.br/noticias/agencia/infos/inforoyalties_.htm} – cobrança da patente de um determinado produto, que permite seu uso ou comercialização – para qualquer alteração. Sua arquitetura é baseada no conceito de que parte de uma aplicação pode ser utilizada em outra que estiver sendo desenvolvida, desencadeando novas formas de desenvolvimento e usabilidade sobre uma mesma aplicação. 
A disponibilidade de diversos serviços, oferecidos pela Google, como GPS, por exemplo, faz com que seja uma plataforma muito útil e eficaz, para facilitar a conclusão das atividades diárias dos indivíduos e o desenvolvimento de aplicações, por parte dos desenvolvedores.
A Figura 4 apresenta a arquitetura do sistema Android, com todas as camadas de componentes de software que a compõe. Dos componentes apresentados, utilizaremos todos os módulos das camadas do Sistema Operacional. Cada camada possui suas responsabilidades quanto ao funcionamento do sistema.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\figura3.png}
\caption{Arquitetura do Sistema Operacional Android, composta por níveis de componentes de software.}
\label{featureSpaces}
\end{center} 
\end{figure}

A camada de Aplicação – Applications é a camada de mais alto nível na arquitetura do sistema Android e disponibiliza os programas usados pelos usuários finais, que interagem com o mesmo.
A camada de Application Framework fornece os blocos de alto nível que serão utilizados para construção das aplicações para o sistema. Os frameworks são disponibilizados pelo Android, e unem diversas funcionalidades em comum às aplicações instaladas no mesmo, ditam o fluxo de controle de uma aplicação e oferecem soluções dentro do domínio de um mesmo problema. Essa camada acerta ao desenvolvedor a chance de estender os frameworks com suas próprias soluções, conforme for necessário.
Uma camada abaixo dela é a camada Android Runtime, na qual fornece a Máquina Virtual (MV) Dalvik\footnote{Mais informações em: http://sites.google.com/site/io/dalvik-vm-internals} e as Bibliotecas da linguagem de programação Java. A MV Dalvik é implementada em Java, em instruções chamadas de bytecodes, usada para otimizar aplicações desenvolvidas para dispositivos móvel, as quais exigem o uso de pouca memória dos aparelhos. Sua execução é facilitada por ser implementada sobre o Kernel do Linux\footnote{Fonte: http://www.kernel.org/}.
No mesmo nível da camada Android Runtime estão as Bibliotecas Nativas do Android (Libraries). São as bibliotecas, implementadas em C e C++, usadas pelos componentes que compõem o sistema Android. Através delas aplicações podem ser desenvolvidas. Trazem aos desenvolvedores, bibliotecas do sistema, para desenvolvimento de soluções que utilizem recursos do sistema. Algumas dessas aplicações podem ser citadas a seguir:
\begin{enumerate}
\item a. Bibliotecas de mídia, aos quais gerenciam a reprodução de áudio e vídeo, e arquivos de imagem;
\item b. Gerenciador gráfico, usado para exibição e renderização de elementos gráficos bi e tridimensionais;
\item c. Bibliotecas 3D, as quais utilizam aceleração e otimização de hardware que renderize gráficos tridimensionais, caso haja no aparelho. São bibliotecas implementadas, baseadas em OpenGL\footnote{Informações em: http://www.geuz.org/gl2ps/};
\item d. Banco de dados SQL, que fornece banco de dados relacional para o armazenamento persistente dos dados da aplicação;
\item e. WebKit, usada para exibição de conteúdo HTML na Internet.
Todas as camadas descritas do Android são construídas sobre o Kernel do Linux, funcionando como uma central de serviços, abstraindo os recursos de hardware com o sistema Android, oferecendo portabilidade às aplicações desenvolvidas a ele. A base do Android gerencia processos, memória, rede, serviços do sistema operacional e drivers de reconhecimento de hardware do dispositivo.
	Para desenvolvimento da nossa aplicação, utilizaremos recursos contidos em todas as camadas do sistema. Através desses recursos e ferramentas contidas nas camadas descritas, será possível desenvolver o projeto proposto, utilizando a linguagem de programação Java, que compõe grande parte dos recursos do Android.
\end{enumerate}


\section{Ferramentas Auxiliares}
Nessa seção serão apresentados os frameworks pesquisados e avaliados, utilizados como base para desenvolvimento do projeto em questão. Inicialmente iremos apresentar o Look!, ferramenta essa em fase de testes, que atua como plataforma para implementação de aplicações no campo da Realidade Aumentada. 
Será apresentada também a ferramenta Mixare, se trata de um framework criado com o objetivo de localizar pontos geográficos, através da câmera do dispositivo móvel, integrando mapeamento de locais com o GPS do aparelho e Realidade Aumentada. Outra ferramenta que será apresentada é o Wikitude, com o mesmo objetivo do Mixare, porém com recursos mais intuitivos e que não se restringem apenas ao mapeamento de locais pré-cadastrados no sistema.

\subsection{Look!}

O Look!\footnote{Fonte: http://www.lookar.net/presentacion/} é um framework em desenvolvimento, criado na Espanha, para o suporte na criação de aplicações de Realidade Aumentada para o sistema operacional Android. A ferramenta, instalada em um aparelho móvel, possibilita o usuário visualizar como são implementadas, a interface e as operações disponíveis através do código do projeto. Sua plataforma é livre, ou seja, possui seu código-fonte aberto para qualquer tipo de alteração e extensão do código por parte dos desenvolvedores.
As interações entre o usuário e o aparelho móvel, através de uma aplicação desenvolvida com o uso do Look!, são feitas a partir da câmera do aparelho móvel, onde o usuário será envolvido, diante da imagem projetada pela câmera, entre os objetos virtuais criados e o ambiente real que estiver presente. O framework possibilita desenvolver aplicações que façam o usuário interagir com os objetos virtuais, projetados por Realidade Aumentada, e ser localizado diante de suas coordenadas geográficas, pelo GPS do aparelho. Em alguns casos, o GPS pode não identificar com precisão as coordenadas do usuário, portanto a partir desse paradigma, novas implementações e tecnologias podem ser utilizadas para esse tipo de situação. 
	Redes Wi-Fi e conexões 2G/3G, podem auxiliar a localizar e posicionar com eficácia, objetos e indivíduos em ambientes internos, excluindo esse tipo de restrição de uso. Para a exclusão de restrições como a descrita, aplicações nesse ramo com o uso do Look!, irão possibilitar a criação de novos recursos com mais eficiência, usabilidade, estendendo as possibilidades de novas funcionalidades a serem criadas.
	O Look também permite a integração com serviços remotos através da Web, o que facilita aplicações multiusuários. As informações obtidas pelo sistema são armazenadas, localmente, ou através de um servidor de armazenamento de dados, facilitando trocas de dados entre os clientes e o servidor [ALCARAZO, et. al., 2011].

\subsection{Wikitude}

O Wikitude\footnote{Fonte: http://www.wikitude.com/wikitude-accelerates-multimedia-content-social-graph-augmented-reality} é um navegador de Realidade Aumentada, criado para smartphones. Inicialmente foi implementada para a primeira versão lançada do sistema Android – Android 1 Platform\footnote{Mais informações em: http://developer.android.com/sdk/android-1.1.html}. Seu desenvolvimento tornou a ferramenta pioneira ao acesso a recursos do sistema operacional como a bússola digital, o GPS e o acelerômetro, e a utilização desses componentes na realização de técnicas de Realidade Aumentada em dispositivos móveis. A partir de sua implementação, foi exigido o uso mais robusto do hardware dos aparelhos, que suprissem a demanda de recursos de localização geográfica nesses dispositivos.
O Wikitude marca os locais projetados na tela do celular, utilizando Realidade Aumentada. A aplicação localiza o local, e o reconhece por suas coordenadas geográficas e seus atributos cadastrados no banco de dados do aplicativo. Ela sinaliza na tela do celular, com pontos sobrepostos à imagem gerada pela câmera do aparelho, os locais, distâncias a serem percorridas para se chegar aos locais sinalizados. Os locais que possuem alguma descrição da Wikipédia são identificados com um ícone diferente dos outros locais que também estão sendo projetados, como pode ser visto na Figura 5.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\figura7.png}
\caption{Exemplo de como o Wikitude projeta as localizações geográficas reconhecidas de acordo com a posição do usuário.}
\label{featureSpaces}
\end{center} 
\end{figure}

O uso da aplicação capacita os usuários na tomada de decisões em várias situações encontradas no cotidiano e em outras experiências realizadas pelos mesmos. Em viagens, por exemplo, a aplicação facilita a localização de restaurantes, hotéis, e locais onde pode fazer a manutenção do seu veículo, em caso de dano do mesmo.

\subsection{Mixare}

O Mixare\footnote{Fonte: http://www.mixare.org/} é um framework desenvolvido para criação de pontos específicos identificados no mapeamento de locais, por suas coordenadas geográficas, e que utilize a câmera e o GPS (Global Positioning System) como ferramentas para projetar esses pontos através da câmera do aparelho móvel. Pode ser modificado livremente, e codificado em uma nova aplicação, a partir de sua Licença Pública Geral (GNU\footnote{Mais informações em: http://www.gnu.org/licenses/gpl-3.0.html}). 
	Sua fonte é livre e seu código-fonte é aberto e expansível. Na Figura 6, é mostrada uma aplicação criada a partir do framework, que localiza as coordenadas geográficas dos locais indicados, contidos na base de dados da aplicação e os projeta na tela do dispositivo.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\figura8.png}
\caption{Exemplo de aplicação implementada pelo uso do framework Mixare.}
\label{featureSpaces}
\end{center} 
\end{figure}

Sua base de dados por padrão é fornecida pela fonte de dados geográficos, mantida pela Wikipédia\footnote{Informações em: http://en.wikipedia.org/wiki/Wikipedia:About}, e transforma essas informações obtidas, através da localização do usuário pelo GPS do aparelho móvel, em pontos geográficos projetados através da câmera do smartphone, utilizando Realidade Aumentada, como ilustrado na Figura 7 .

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\figura4.png}
\caption{Exemplo da troca de informações entre a base de dados geográfica e o Mixare, transmitindo essa troca em pontos localizados na tela do aparelho móvel.}
\label{featureSpaces}
\end{center} 
\end{figure}

O Mixare possibilita o desenvolvedor, caso queira salvar suas informações em seu próprio banco de dados, em um servidor local. Seu acesso é através de um link externo, dentro de uma página HTML.  Essa página acessará as informações via Web, e transferirá ao aplicativo, trocando informações entre o Mixare e a fonte de dados geográficos armazenada no banco de dados local. Irá transmitir essas informações através da Realidade Aumentada, e projetará os dados obtidos pela câmera do aparelho móvel, como é mostrada na Figura 8.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\figura5.png}
\caption{Exemplo de como é feito o uso de uma página HTML para acessar os dados geográficos através de um link externo.}
\label{featureSpaces}
\end{center} 
\end{figure}

O aplicativo pode também acessar dados geográficos a partir de uma aplicação própria, criada para fornecer dados de uma fonte criada pelo desenvolvedor, em tempo de execução do aplicativo. Com esse meio de acesso aos dados, o Mixare poderá ser acessado de um navegador Web instalado no sistema Android, como pode ser visualizado na Figura 9.

\begin{figure}[!htbp]
\begin{center}
\includegraphics[scale=1]{\figura6.png}
\caption{Exemplo do uso de um aplicativo independente que fornece os dados geográficos ao Mixare.}
\label{featureSpaces}
\end{center} 
\end{figure}